﻿/**
 * @author GodSon
 * http://www.btboys.com
 * date 2011-5-12 12:30	version 2.1
 * @How to use
 * var path = 'page/newFile.html';
 *	var confing = {
 *		url : path,
 *		title : "标题",
 *		width : 500,
 *		height : 150,
 *		maximizable : false,
 *		buttons : [{
 *				text : '继续>>',
 *				handler : function() {
 *					fun(GETWIN(this));
 *				}
 *		}]
 *	};
 *	var curDialogId = $.createWin(confing);
 *	销毁	
 *  $(GETWIN(curDialogId)).destroy(); 
 */

/**
 * @param {Object} options
 * return windowId
*/
(function($){
	/**
	 * 创建UUID
	 */
	function S4() {
		return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
	}
	/**
	 * 生成windowId
	 */
	function  CreateIndentityWindowId(){
		return "UUID-"+(S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
	}
	/**
	 * 销毁
	 */
	function destroy(target){
		var options = $(target).dialog("options");
		if(options.fck){
			$("body").children("iframe").remove();
			KE.remove(options.fck.id);
		}
		if(options.ke){
			KE.remove(options.ke.id);
		}
		$(target).dialog("destroy");
	}
	
	/**
	 * 获取当前操作的window 
	 *  @param target 当前窗口的windowId 或者 当前窗口中的元素(element)
	 */
	function getWindow(target){
		if(typeof target == "string"){
			return document.getElementById(target);
		}else{
			return $(target).parents(".window-body");
		}
	}
	
	//入口方法
	$.createWin = function(options){
		if(!options.url && !options.content){
			$.messager.alert("提示","缺少必要参数!(url or content)");
			return false;
		}
		
		var windowId = CreateIndentityWindowId();
		
		if(options.winId){
			windowId=options.winId;
		}
		
		//如果存在buttons(请看easyui对buttons的定义)，默认添加关闭按钮
		if(options.buttons){
			var closeBtn = {
					text:'关闭',
					handler:function(){
						$("#"+windowId).dialog("destroy");
					}
			};
			options.buttons.push(closeBtn);
		}
		
		options = $.extend({},$.createWin.defaults, options || {});
		
		if(options.content){
			ajaxSuccess(options.content);
		}else{
			if(!options.isIframe){
				$.ajax({
					url:options.url,
					type:"POST",
					data:options.data == null ? "" : options.data,
					success:function(date){
						ajaxSuccess(date);
					},
					error:function(){
						$.messager.alert("提示","加载失败！");
					}
				});
			}else{
				ajaxSuccess();
			}
		}
		return windowId;
		
		/**
		 * 页面加载成功处理
		 */
		function ajaxSuccess(date){
			var dialog  = $('<div id="'+windowId+'"></div>');
			if(options.target == 'body'){
				dialog.appendTo(options.target);
			}else{
				options.inline = true;
				dialog.appendTo($(options.target));
			}
			if(options.isIframe && !date){
				$(dialog).html('<iframe width="100%" height="100%" frameborder="0" src="'+options.url+'" ></iframe>');
			}else{
				$(dialog).html(date);
			}
			
			dialog.dialog(options);
			dialog.dialog('open');

			options.onComplete.call(this,windowId);									//创建成功后回调函数
			//可以整合fck的显示
			// options.fck:{
			// 		"id":textAreaIdORtextAreaName,
			//  	"height":fckHeight
			// }
			if(options.fck){
				CKEDITOR.replace(options.fck.id,{
					height:options.fck.height
				});
			}
			//可以整合KindEditor的显示
			// options.ke:{
			// 		"id":textAreaId
			// }
			if(options.ke){
				KE.init(options.ke);
				KE.create(options.ke.id);
			}
		}
	};
	
	//关闭并销毁实体
	$.fn.destroy =function(){
		destroy(this);
	};
	
	window.GETWIN = getWindow;
	
	//默认参数
	$.createWin.defaults = $.extend({},$.fn.dialog.defaults,{
			url:'',					//窗口要加载的html片段地址
			data:'',				//可带参数，data类型为jqurey.ajax的data参数类型
			target:'body',				//指定窗口打开的区域,是一个jq的选择器，例如#id
			isIframe:false,			//如果存在url，是否在iframe里面打开url
			zIndex: 100000,			
			height : 200,
			width : 400,
			collapsible: false,
			minimizable: false,
			maximizable: false,
			closable: true,
			modal:true,
			onClose:function(){
				destroy(this);
			},
			onMove:function(left,top){
				var opts = $.data(this, 'panel').options;
				if(top < 0){
					$(this).dialog("move",{"left":left,"top":0});
				}else if(opts.maximized){
					$(this).dialog("restore");
					$(this).dialog("move",{"left":left+100,"top":top});
				}
				if(top > ($(opts.target).height()-20)){
					$(this).dialog("move",{"left":left,"top":($(opts.target).height()-25)});
				}
			},
			onComplete:function(windowId){}	//创建成功后的回调方法		
	});
})(jQuery);
